package com.quyunshuo.androidbaseframemvvm.base.mvvm

import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import android.util.AttributeSet
import android.view.View
import android.webkit.WebSettings
import com.tencent.smtt.sdk.BuildConfig
import com.tencent.smtt.sdk.WebView
import me.jessyan.autosize.utils.AutoSizeLog.isDebug

/**
 * 基础 WebView 组件（基于腾讯 X5 内核）
 * 实现功能：
 * 1. 通用 WebView 配置
 * 2. 混合内容加载处理
 * 3. 滚动监听
 * 4. 调试支持
 */
open class BaseWebView @JvmOverloads constructor(  // @JvmOverloads 支持Java重载构造
    context: Context,
    attr: AttributeSet? = null
) : WebView(context, attr) {

    // 滚动监听接口实例
    private var mOnWebScrollListener: OnWebScrollListener? = null

    /**
     * 初始化配置
     */
    init {
        initSetting()  // 执行基础设置

        /**
         * 处理 Android 5.0+ 混合内容策略
         * 允许加载 HTTPS 页面中的 HTTP 资源
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
        }
    }

    /**
     * 核心配置方法
     * 包含 WebView 的通用设置
     */
    @SuppressLint("SetJavaScriptEnabled")  // 忽略 JavaScript 启用的 Lint 警告
    private fun initSetting() {
        // 滚动边界效果配置
        overScrollMode = View.OVER_SCROLL_ALWAYS  // 滚动到边界时显示发光效果

        settings.apply {
            // 基础编码配置
            defaultTextEncodingName = "utf-8"  // 设置默认编码

            // JavaScript 相关
            javaScriptEnabled = true  // 启用 JS
            javaScriptCanOpenWindowsAutomatically = true  // 允许 JS 自动开窗

            // 适应手机屏幕
            useWideViewPort = true  // 支持 meta viewport 标签
            loadWithOverviewMode = true  // 缩放至屏幕宽度
            layoutAlgorithm = com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm.NARROW_COLUMNS  // 排版算法（X5 内核特有）

            // 缩放控制
            setSupportZoom(false)  // 禁用缩放支持
            builtInZoomControls = false  // 隐藏缩放控件

            // 缓存与存储
            setAppCacheEnabled(true)  // 启用应用缓存
            setAppCacheMaxSize(Long.MAX_VALUE)  // 设置最大缓存空间
            domStorageEnabled = true  // 启用 DOM 存储
            cacheMode = WebSettings.LOAD_DEFAULT  // 使用默认缓存策略

            // 调试支持
            if (BuildConfig.DEBUG) {
                setWebContentsDebuggingEnabled(true)  // 启用 Chrome 远程调试
            }

            // ❗问题点：此处覆盖了之前的缓存设置
            mixedContentMode = WebSettings.LOAD_NO_CACHE  // 实际应该用 setCacheMode()
        }

        // X5 内核扩展配置（腾讯特有）
        x5WebViewExtension?.apply {
            isHorizontalScrollBarEnabled = false  // 禁用水平滚动条
            isVerticalScrollBarEnabled = false  // 禁用垂直滚动条
            setScrollBarFadingEnabled(false)  // 滚动条不自动淡出
        }
    }

    /**
     * 滚动变化监听（核心重写方法）
     */
    override fun onScrollChanged(scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {
        super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY)
        // 将滚动变化传递给监听器
        mOnWebScrollListener?.onWebScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY)
    }

    /**
     * 设置滚动监听接口
     */
    fun setOnWebScrollListener(onWebScrollListener: OnWebScrollListener) {
        this.mOnWebScrollListener = onWebScrollListener
    }

    /**
     * 滚动监听接口定义
     * 用于实现 WebView 滚动与原生控件的联动
     */
    interface OnWebScrollListener {
        fun onWebScrollChanged(scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int)
    }
}